package com.zj.eswrapper.utils;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;

import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Stream;

/**
 * 参数校验
 *
 * @author arthur_zhou
 * @date 2023/12/29 14:21
 */
public class CheckUtil {

    /**
     * 校验参数
     *
     * @param val 校验参数，任一为空
     * @return true 至少有一个为空
     */
    @SafeVarargs
    public static <T> boolean anyEmpty(T... val) {
        if (Objects.isNull(val)) {
            return true;
        }
        return Stream.of(val).anyMatch(CheckUtil::isEmpty);
    }

    /**
     * 校验参数
     *
     * @param val 校验参数，全部为空
     * @return true 全部为空
     */
    @SafeVarargs
    public static <T> boolean allEmpty(T... val) {
        if (Objects.isNull(val)) {
            return true;
        }
        return Stream.of(val).allMatch(CheckUtil::isEmpty);
    }

    /**
     * 校验对象是否为空
     *
     * @param v 字符串判断""，集合判断size大小
     * @return true 为空
     */
    public static boolean isEmpty(Object v) {
        if (Objects.isNull(v) || "".equals(v)) {
            return true;
        }
        if (v instanceof Collection) {
            return CollectionUtil.isEmpty((Collection<?>) v);
        }
        if (v instanceof Map) {
            return MapUtil.isEmpty((Map<?, ?>) v);
        }
        return false;
    }
}
